package cliente;

import java.util.ArrayList;
import java.util.List;
import java.util.Observable;
import java.util.Observer;

import producto.Pedido;

public class Cliente implements Observer{
	
	CuentaCorriente cuentaCorriente;
	String nombre;
	String apellido;
	public List<String> correoElectronico;
	List<Pedido> pedidosDeseadosOK;
	List<Pedido> pedidosDeseadosSinStock;
	
	public Cliente(String nombre, String apellido){
		this.nombre=nombre;
		this.apellido=apellido;
		this.correoElectronico= new ArrayList<String>();
		this.cuentaCorriente= new CuentaCorriente();
		
		this.pedidosDeseadosOK= new ArrayList<Pedido>();
		this.pedidosDeseadosSinStock= new ArrayList<Pedido>();
	}

	public void generarNotaDeCredito(double dineroDisponible) {
		this.cuentaCorriente.incrementarSaldo(dineroDisponible);
		this.setCorreoElectronico("Deposito en Cta Cte");
	}

	public void agregarUnPedido(Pedido unPedido) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void update(Observable arg0, Object arg) {
		// TODO Auto-generated method stub
		
		String aspecto = (String) arg;
		
		
		if(aspecto.equalsIgnoreCase("Oferta")){
			setCorreoElectronico(aspecto);
		}
		/*
		if(arg.equals("Pedido OK")){
			revisarPedidosDeseadosYNotificar(aspecto);
		}
		*/
	}
	
	public void setCorreoElectronico(String unCorreo){
		this.correoElectronico.add(unCorreo);
	}
	
	public double saldoEnCuentaCorriente() {
		// TODO Auto-generated method stub
		return this.cuentaCorriente.getSaldo();
	}
	
	/*
	 * 	public void agregarPedidoDeseado(Pedido unPedido){
		if (unPedido.elementosSinStock()){
			this.pedidosDeseadosSinStock.add(unPedido);
			unPedido.obesrvarProductosSinStock();
			
		}
		else{
			setCorreoElectronico("Pedido OK");
			this.pedidosDeseadosOK.add(unPedido);
		}
		
	}
	*/
	 
	/*
	private void revisarPedidosDeseadosYNotificar(String aspecto) {
		// TODO Auto-generated method stub
		
		//Si hay mas de uno ERROR!
		
		if (hayPedidosDeseadosSinStockOK()){
			cambiarPedidoDeseadosSinStockAOK();
			setCorreoElectronico(aspecto);
		}
		
	}

	private void cambiarPedidoDeseadosSinStockAOK() {
		// TODO Auto-generated method stub
		for (Pedido o : this.pedidosDeseadosSinStock){
			if(!o.elementosSinStock()){
				this.pedidosDeseadosSinStock.remove(o);
				this.pedidosDeseadosOK.add(o);
			}
		}
	}

	private boolean hayPedidosDeseadosSinStockOK() {
		// TODO Auto-generated method stub
		List<Boolean> answers = new ArrayList<Boolean>();
		
		for (Pedido o : this.pedidosDeseadosSinStock){
			answers.add(!o.elementosSinStock());
		}
		return answers.contains(true);
	}

	*/
	
}
